home *** CD-ROM | disk | FTP | other *** search
- package engine.dynamicObjects
- {
- import engine.WorldScene;
- import flash.display.BitmapData;
- import flash.geom.Matrix;
- import flash.geom.Point;
- import flash.geom.Rectangle;
-
- public class DynamicObject
- {
-
-
- protected var _auditMeter:Number = 0;
-
- protected var _explodes:Boolean = false;
-
- public var hitH:Number = 35;
-
- public var destroyed:Boolean = false;
-
- public var vis:Boolean = true;
-
- public var hitW:Number = 35;
-
- protected var DMETHOD:Object;
-
- protected var _shrapnelCount:Number = 0;
-
- protected var _shrapnelType:Boolean = false;
-
- protected var _blendMode:String;
-
- protected var _persistent:Boolean = false;
-
- protected var _animationMethod:Number = 0;
-
- protected var _currentFrame:Number = 1;
-
- protected var _drawDepth:Number = 1;
-
- public var pxd:Number = 1;
-
- protected var ANIM_METHODS:Object;
-
- public var yflip:Number = 1;
-
- protected var _lockScale:Boolean = false;
-
- public var h:Number = 0;
-
- public var r:Number = 0;
-
- public var s:Number = 1;
-
- public var w:Number = 0;
-
- public var x:Number = 0;
-
- public var y:Number = 0;
-
- public var z:Number = 1;
-
- public var pyd:Number = 1;
-
- protected var _collisionMethod:Number = 0;
-
- protected var _loopDelayMax:* = 0;
-
- public var colOffsetX:Number = 0;
-
- public var colOffsetY:Number = 0;
-
- public var lockY:Boolean = false;
-
- protected var _frameSpeed:Number = 0;
-
- public var lockX:Boolean = false;
-
- protected var _loopFrame:Number = 1;
-
- public var solid:Boolean = false;
-
- protected var COLLISION_METHOD:Object;
-
- protected var _shrapnelVel:Number = 0;
-
- protected var _objectType:Number = -1;
-
- protected var _bmd:BitmapData;
-
- public var roX:Number = 0;
-
- public var roY:Number = 0;
-
- protected var _bmdArray:Array;
-
- public var vx:Number = 0;
-
- public var vy:Number = 0;
-
- public var vz:Number = 0;
-
- protected var _collectable:Boolean = false;
-
- protected var _loopDelay:* = 0;
-
- protected var _collisionBitmap:BitmapData;
-
- protected var _dangerous:Boolean = false;
-
- protected var _matrix:Matrix;
-
- public var xflip:Number = 1;
-
- protected var _drawMethod:int;
-
- protected var OBJ_TYPES:Object;
-
- protected var _auditThreshhold:Number = 10;
-
- private var _cameraFocus:Boolean = false;
-
- protected var _scfl:Number;
-
- public function DynamicObject(inBmd:BitmapData = null)
- {
- ANIM_METHODS = {
- "PlayOnce":0,
- "Loop":1,
- "Arbitrary":2,
- "LoopWithRandomDelay":3,
- "PlayOncePersistent":4
- };
- OBJ_TYPES = {
- "FX":0,
- "GP":1,
- "SC":2
- };
- DMETHOD = {
- "Pixel":0,
- "Fast":1,
- "Slow":2
- };
- COLLISION_METHOD = {
- "VisibleIntersect":0,
- "Radial":1
- };
- _drawDepth = 1;
- _lockScale = false;
- _currentFrame = 1;
- _loopFrame = 1;
- _loopDelay = 0;
- _loopDelayMax = 0;
- _frameSpeed = 0;
- _animationMethod = 0;
- _collisionMethod = 0;
- _objectType = -1;
- x = 0;
- y = 0;
- z = 1;
- vx = 0;
- vy = 0;
- vz = 0;
- r = 0;
- s = 1;
- w = 0;
- h = 0;
- hitW = 35;
- hitH = 35;
- roX = 0;
- roY = 0;
- colOffsetX = 0;
- colOffsetY = 0;
- vis = true;
- solid = false;
- lockX = false;
- lockY = false;
- destroyed = false;
- pxd = 1;
- pyd = 1;
- xflip = 1;
- yflip = 1;
- _matrix = new Matrix();
- _auditThreshhold = 10;
- _auditMeter = 0;
- _persistent = false;
- _collectable = false;
- _explodes = false;
- _dangerous = false;
- _shrapnelType = false;
- _shrapnelCount = 0;
- _shrapnelVel = 0;
- _cameraFocus = false;
- super();
- _bmd = inBmd;
- if(_bmd)
- {
- w = _bmd.width;
- h = _bmd.height;
- }
- else
- {
- trace("### ERROR: DynamicObject has no assigned graphic");
- }
- _scfl = WorldScene.Instance.Con.SC_FOCAL_LENGTH;
- }
-
- private function pixelDraw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- }
-
- protected function getFullBoundsCollisionMap() : *
- {
- _collisionBitmap = new BitmapData(w,h,false,16711680);
- trace("getFullBoundsCollisionMap - w: " + w + " h: " + h + " _collisionBitmap: " + _collisionBitmap);
- }
-
- public function get AuditThreshhold() : Number
- {
- return _auditThreshhold;
- }
-
- public function set AuditMeter(inVal:Number) : *
- {
- if(!_persistent)
- {
- _auditMeter = inVal;
- }
- }
-
- public function set CameraFocus(inVal:Boolean) : *
- {
- _cameraFocus = inVal;
- }
-
- protected function getVector(inRadians:Number, inVelocity:Number) : Object
- {
- var vX:Number = NaN;
- var vY:Number = NaN;
- vX = inVelocity * Math.cos(inRadians);
- vY = inVelocity * Math.sin(inRadians);
- return {
- "x":vX,
- "y":vY
- };
- }
-
- protected function getRadians(inSourceX:Number, inSourceY:Number, inTargetX:Number, inTargetY:Number) : Number
- {
- return Math.atan2(inTargetY - inSourceY,inTargetX - inSourceX);
- }
-
- public function draw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- switch(_drawMethod)
- {
- case DMETHOD.Pixel:
- pixelDraw(inBitmap,inCamX,inCamY);
- break;
- case DMETHOD.Fast:
- fastDraw(inBitmap,inCamX,inCamY);
- break;
- case DMETHOD.Slow:
- slowDraw(inBitmap,inCamX,inCamY);
- break;
- default:
- trace("### ERROR Dynamic object has no draw method set");
- }
- }
-
- public function fStep() : *
- {
- var cf:Number = NaN;
- x += vx;
- y += vy;
- z += vz;
- if(z < 1)
- {
- z = 1;
- }
- if(_bmdArray)
- {
- switch(_animationMethod)
- {
- case ANIM_METHODS.PlayOnce:
- _currentFrame += _frameSpeed;
- if(_currentFrame >= _bmdArray.length)
- {
- _currentFrame = _bmdArray.length;
- destroy();
- }
- break;
- case ANIM_METHODS.PlayOncePersistent:
- _currentFrame += _frameSpeed;
- if(_currentFrame >= _bmdArray.length)
- {
- _currentFrame = _bmdArray.length;
- }
- break;
- case ANIM_METHODS.Loop:
- _currentFrame += _frameSpeed;
- if(_currentFrame > _bmdArray.length)
- {
- _currentFrame = _loopFrame;
- }
- break;
- case ANIM_METHODS.Arbitrary:
- if(_currentFrame > _bmdArray.length)
- {
- _currentFrame = _bmdArray.length;
- }
- if(_currentFrame < 1)
- {
- _currentFrame = 1;
- }
- break;
- case ANIM_METHODS.LoopWithRandomDelay:
- --_loopDelay;
- _currentFrame += _frameSpeed;
- if(_currentFrame > _bmdArray.length)
- {
- _loopDelay = _loopDelayMax / 4 + Math.random() * _loopDelayMax;
- _currentFrame = _loopFrame;
- _frameSpeed = 0;
- }
- if(_loopDelay < 0)
- {
- _frameSpeed = 1;
- }
- }
- cf = Math.floor(_currentFrame);
- _bmd = _bmdArray[cf - 1];
- }
- }
-
- public function set Speed(inVal:Number) : *
- {
- _frameSpeed = inVal;
- }
-
- public function get Type() : Number
- {
- return _objectType;
- }
-
- public function playAnim() : *
- {
- _frameSpeed = 1;
- }
-
- public function get AuditMeter() : Number
- {
- return _auditMeter;
- }
-
- public function get CameraFocus() : Boolean
- {
- return _cameraFocus;
- }
-
- public function get bmd() : BitmapData
- {
- return _bmd;
- }
-
- public function collisionDraw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- var rect:* = undefined;
- var csx:Number = NaN;
- var csy:Number = NaN;
- var mtx:Number = NaN;
- var mty:Number = NaN;
- var pt:* = undefined;
- if(!_collisionBitmap)
- {
- _collisionBitmap = new BitmapData(hitW,hitH,false,16711680);
- }
- rect = new Rectangle(0,0,_collisionBitmap.width,_collisionBitmap.height);
- csx = s * (z / _scfl) * xflip;
- csy = s * (z / _scfl) * yflip;
- mtx = -inCamX * pxd * z + (x - _collisionBitmap.width / 2) + colOffsetX;
- mty = -inCamY * pyd * z + (y - _collisionBitmap.height / 2) + colOffsetY;
- pt = new Point(mtx,mty);
- inBitmap.copyPixels(_collisionBitmap,rect,pt,null,null,false);
- }
-
- public function get CollisionMethod() : Object
- {
- return _collisionMethod;
- }
-
- public function findCollision(inBitmap:BitmapData, inColour:Number, inCamX:Number, inCamY:Number) : Boolean
- {
- var cbmd:BitmapData = null;
- var csx:Number = NaN;
- var csy:Number = NaN;
- var mtx:Number = NaN;
- var mty:Number = NaN;
- var rect:* = undefined;
- var pt:* = undefined;
- var threshold:uint = 0;
- var color:uint = 0;
- var maskColor:uint = 0;
- var numpx:uint = 0;
- cbmd = new BitmapData(50,50,true,0);
- csx = s * (z / _scfl) * xflip;
- csy = s * (z / _scfl) * yflip;
- mtx = -inCamX * pxd * z + (x - 25);
- mty = -inCamY * pyd * z + (y - 25);
- rect = new Rectangle(mtx,mty,50,50);
- pt = new Point(0,0);
- threshold = 16711680;
- color = 16711680;
- maskColor = 16711680;
- numpx = cbmd.threshold(inBitmap,rect,pt,"==",threshold,color,maskColor,true);
- if(numpx > 10)
- {
- return true;
- }
- return false;
- }
-
- protected function slowDraw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- var csx:Number = NaN;
- var csy:Number = NaN;
- var mtx:Number = NaN;
- var mty:Number = NaN;
- var ox:Number = NaN;
- var oy:Number = NaN;
- _matrix.identity();
- csx = s * (z / _scfl) * xflip;
- csy = s * (z / _scfl) * yflip;
- if(r != 0)
- {
- ox = -w / 2 + roX;
- oy = -h / 2 + roY;
- _matrix.translate(ox,oy);
- _matrix.rotate(r);
- _matrix.translate(-ox,-oy);
- }
- if(!_lockScale)
- {
- if(s != 1 || z != 0)
- {
- _matrix.translate(-w / 2,-h / 2);
- _matrix.scale(csx,csy);
- _matrix.translate(w / 2,h / 2);
- }
- }
- if(!lockX)
- {
- mtx = -inCamX * z + (x - w * csx / 2);
- }
- else
- {
- mtx = -inCamX * 1 + (x - w * csx / 2);
- }
- if(!lockY)
- {
- mty = -inCamY * z + (y - h * csy / 2);
- }
- else
- {
- mty = -inCamY * 1 + (y - h * csy / 2);
- }
- _matrix.translate(mtx,mty);
- if(!_bmd)
- {
- trace("### ERROR _bmd is null - _currentFrame: " + _currentFrame);
- }
- inBitmap.draw(_bmd,_matrix,null,_blendMode,null,true);
- }
-
- private function fastDraw(inBitmap:BitmapData, inCamX:Number, inCamY:Number) : *
- {
- var rect:* = undefined;
- var mtx:Number = NaN;
- var mty:Number = NaN;
- var pt:* = undefined;
- rect = new Rectangle(0,0,_bmd.width,_bmd.height);
- if(!lockX)
- {
- mtx = -inCamX * pxd * z + (x - w / 2);
- }
- else
- {
- mtx = -inCamX * pxd * 1 + (x - w / 2);
- }
- if(!lockY)
- {
- mty = -inCamY * pyd * z + (y - h / 2);
- }
- else
- {
- mty = -inCamY * pyd * 1 + (y - h / 2);
- }
- pt = new Point(Math.floor(mtx),Math.floor(mty));
- inBitmap.copyPixels(_bmd,rect,pt,null,null,true);
- }
-
- public function destroy() : *
- {
- if(_objectType == -1)
- {
- trace("### ERROR Object type not defined on: " + this + " _objectType: " + _objectType);
- }
- switch(_objectType)
- {
- case OBJ_TYPES.FX:
- WorldScene.Instance.clearFX(this);
- break;
- case OBJ_TYPES.GP:
- WorldScene.Instance.clearGPObject(this);
- }
- destroyed = true;
- }
-
- public function get CMethods() : Object
- {
- return COLLISION_METHOD;
- }
- }
- }
-